package org.facyt.vacas.entities.login;

import java.io.Serializable;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "accion", schema = "aplicaciones")
public class Accion implements Serializable {

	@Id
	@SequenceGenerator(name = "accion_seq", sequenceName = "aplicaciones.accion_id_seq")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "accion_seq")
	@Column(name = "id")
	private Integer id;

	@Column(name = "descripcion")
	private String descripcion;

	@Column(name = "btn_key")
	private String btn_key;

	@Column(name = "version")
	private String version;

	@Column(name = "estado")
	private Boolean estado;

	// TODO: ver??? representa otro objeto accion. si es null, esta accion esta
	// en el menu prpal.
	// @ManyToOne
	// @JoinColumn(name="accion_padre", nullable=true)
	// private Accion accion_padre;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public String getBtn_key() {
		return btn_key;
	}

	public void setBtn_key(String btn_key) {
		this.btn_key = btn_key;
	}

	public String getVersion() {
		return version;
	}

	public void setVersion(String version) {
		this.version = version;
	}

	public Boolean getEstado() {
		return estado;
	}

	public void setEstado(Boolean estado) {
		this.estado = estado;
	}

	// public Accion getAccion_padre() {
	// return accion_padre;
	// }
	//
	// public void setAccion_padre(Accion accion_padre) {
	// this.accion_padre = accion_padre;
	// }

	// for joing the tables (many-to-many)
	// @ManyToMany(cascade=CascadeType.ALL)
	// @JoinTable(name="accion_perfil" , joinColumns=
	// @JoinColumn(name="fk_acion"),
	// inverseJoinColumns= @JoinColumn(name="fk_perfil")
	// )

	@ManyToMany(mappedBy = "acciones", fetch = FetchType.EAGER)
	private Set<Perfil> perfiles;

	public Set<Perfil> getPerfiles() {
		return perfiles;
	}

	public void setPerfiles(Set<Perfil> perfiles) {
		this.perfiles = perfiles;
	}

}
